<?php
namespace App\Job;

use Hyperf\AsyncQueue\Annotation\AsyncQueueMessage;

use App\Query\LevelQuery;
use App\Repository\UserRepository;
use App\Repository\LevelRepository;

// 等级奖
class UserAllPrizeJob
{
    /**
     * @AsyncQueueMessage
     */
    public function push($id, $money, $content)
    {
        // 最大等级
        $max = LevelQuery::model()->first();
        
        // 起始差值
        $up = 0;
        
        // 起始用户
        $user = UserRepository::find($id);
        
        // 起始等级
        $level = LevelRepository::make();

        while($user)
        {
            // 等级
            $level->model($user->level);
            
            // 算出奖
            if($res = $level->userAllPrize($money, $up))
            {
                [$prize, $up] = $res;
                
                if($prize > 0)
                {
                    // 加入奖
                    $user->moneyFullAdd($prize, $content, 'user_all_prize');
                }
            }
            
            // 如果到达了最大等级或没有上级
            if($max->id == $level->id || !$user->user)
            {
                return;
            }
            
            // 再次查询上级
            $user->model($user->user);
        }
    }
}